package com.atguigu.gulimall.product.service;

import com.atguigu.gulimall.product.vo.AttrAttrgroupRelationVO;
import com.atguigu.gulimall.product.vo.AttrResponseVO;
import com.atguigu.gulimall.product.vo.AttrVO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.atguigu.common.utils.PageUtils;
import com.atguigu.gulimall.product.entity.AttrEntity;

import java.util.List;
import java.util.Map;

/**
 * 商品属性
 *
 * @author DuGuanghan
 * @since 2024-01-19 16:36:47
 */
public interface AttrService extends IService<AttrEntity> {

    /**
     * 分页查询
     *
     * @param params 参数
     * @return {@link PageUtils }
     * @author DuGuanghan
     * @since 2024-01-19 16:37:01
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 保存商品属性和商品属性分组信息
     *
     * @param attr 商品属性
     * @author DuGuanghan
     * @since 2024-01-19 16:35:47
     */
    void saveAttr(AttrVO attr);


    /**
     * 分页查询商品属性基础信息
     *
     * @param params    参数
     * @param catelogId 分类 ID
     * @param attrType  属性类型
     * @return {@link PageUtils }
     * @author DuGuanghan
     * @since 2024-01-19 18:21:22
     */
    PageUtils queryAttrBasePage(Map<String, Object> params, Long catelogId, String attrType);

    /**
     * 获取属性信息
     *
     * @param attrId 属性 ID
     * @return {@link AttrResponseVO }
     * @author DuGuanghan
     * @since 2024-01-31 09:21:51
     */
    AttrResponseVO getAttrInfo(Long attrId);

    /**
     * 更新属性
     *
     * @param attr 属性
     * @author DuGuanghan
     * @since 2024-01-31 10:17:30
     */
    void updateAttr(AttrResponseVO attr);

    /**
     * 获取属性分组的关联的所有属性
     *
     * @param attrgroupId 分组id
     * @return {@link List }<{@link AttrEntity }>
     * @author DuGuanghan
     * @since 2024-02-01 10:27:17
     */
    List<AttrEntity> getRelationAttr(Long attrgroupId);

    /**
     * 删除属性与分组的关联关系
     *
     * @param relationVOS 属性-分组关系VO数组
     * @author DuGuanghan
     * @since 2024-02-01 11:39:29
     */
    void deleteRelationAttr(AttrAttrgroupRelationVO[] relationVOS);

    /**
     * 获取属性分组没有关联的其他属性
     *
     * @param attrgroupId 分组 ID
     * @param params      参数
     * @return {@link PageUtils }
     * @author DuGuanghan
     * @since 2024-02-01 15:56:07
     */
    PageUtils getRelationNoattr(Long attrgroupId, Map<String, Object> params);

    /**
     * 获取可检索的属性ID
     *
     * @param attrIds 属性ID
     * @return {@link List }<{@link Long }>
     * @author DuGuanghan
     * @since 2024-04-09 10:38:42
     */
    List<Long> queryAttrBySearch(List<Long> attrIds);
}

